<?php
/**商品分类表模型
 * @Author: 976123967@qq.com
 * @Date:   2014-08-05 23:48:37
 * @Last Modified by:   chen
 * @Last Modified time: 2014-09-02 21:52:00
 */
class CategoryModel extends Model{
	// 指定表名称
	public $table = 'category';
	// 所有商品分类信息
	public $category;
	public $topCategory;



	/**
	 * [$validate 自动验证]
	 * @var array
	 */
	public $validate = array(
		// 父级分类验证
		array('pid','regexp:/^\d+$/','请选择上级分类名称',2,3),
		// 分类名称验证
		array('cname','nonull','请输入分类名称',2,3),
		array('cname','maxlen:20','分类名称最大长度不能超过20个字符',2,3),
		// 分类标题
		array('title','nonull','请输入分类标题',2,3),
		array('title','maxlen:60','分类标题最大长度不能超过60个字符',2,3),
		// 分类关键字
		array('keywords','maxlen:120','分类关键字最大长度不能超过120个字符',3,3),
		// 分类描述
		array('description','maxlen:255','分类描述最大长度不能超过120个字符',3,3),
		// 分类排序
		array('sort','regexp:/^\d+$/','分类排序必须数字',3,3),
		// 显示和隐藏
		array('display','num:0,1',' 显示和隐藏状态选择错误',3,3),
	);

	/**
	 * [$auto 自动完成]
	 * @var array
	 */
	public $auto=array(
		// 分类排序
		array('sort','intval','function',2,3)
	);

	/**
	 * [__init 初始化]
	 * @return [type] [description]
	 */
	public function __init()
	{
		// 读取缓存文件
		$this->category = S('category',false,0,array('dir'=>CACHE_PATH));
		// 读取缓存文件
		$this->topCategory = S('topCategory',false,0,array('dir'=>CACHE_PATH));
	}

	/**
	 * [get_category_all 分类树]
	 * @return [type] [description]
	 */
	public function get_category_all()
	{
		return Data::tree($this->category,'cname');
	}


	/**
	 * [add_category 添加商品分类]
	 */
	public function add_category()
	{
		// 添加商品分类
		$this->add();
		// 更新商品分类的缓存
		$this->update_category_cache();
	}



	/**
	 * [save_category 编辑商品分类]
	 */
	public function save_category()
	{
		// 编辑商品分类
		$this->save();
		// 更新商品分类的缓存
		$this->update_category_cache();
	}
	/**
	 * [get_category_one 单条记录]
	 * @param  [type] $cid [description]
	 * @return [type]      [description]
	 */
	public function get_category_one($cid)
	{
		foreach($this->category as $k=>$v)
		{
			if($k==$cid)
				return $v;
		}
	}
	/**
	 * [del_category 删除分类]
	 * @param  [type] $cid [description]
	 * @return [type]      [description]
	 */
	public function del_category($cid)
	{
		// 验证
		$data = $this->get_category_one($cid);
		if(!$data)
		{
			 $this->error='分类不存在';
			 return false;
		}

		$count = $this->where(array('pid'=>$cid))->count();
		if($count)
		{
			 $this->error='请先删除子分类';
			 return false;
		}


		// 删除
		$this->delete($cid);
		
		// 更新商品分类的缓存
		$this->update_category_cache();
		return true;

	}



	/**
	 * [update_category_cache 更新商品分类的缓存]
	 * @return [type] [description]
	 */
	public function update_category_cache()
	{
		// 查询所有的商品分类
		$category = $this->order('sort asc')->all();

		// 重新组合数组
		$temp = array();
		foreach($category as $k=>$v)
		{
			$temp[$v['cid']]=$v;
		}
		// 写缓存文件
		S('category',$temp,0,array('dir'=>CACHE_PATH));



		// 查询所有的商品分类
		$topCategory = $this->where(array('pid'=>0))->order('sort asc')->all();

		// 重新组合数组
		$temp = array();
		foreach($topCategory as $k=>$v)
		{
			$temp[$v['cid']]=$v;
		}
		// 写缓存文件
		S('topCategory',$temp,0,array('dir'=>CACHE_PATH));


	}



	/**
	 * [sort 排序分类]
	 * @return [type] [description]
	 */
	public function category_sort()
	{
		$cid = Q('post.cid');
		if(empty($cid))
		{
			$this->error='没有选择任何信息用于排序';
			return false;
		}

		$sort = Q('post.sort');
		foreach($cid as $k =>$v)
		{
			if(!is_numeric($sort[$k]))
			{
				$this->error='排序值只能输入数字';
				return false;
			}	
		}

		foreach($cid as $k=> $v)
		{
			$data = array('cid'=>$v,'sort'=>$sort[$k]);
			$this->update($data);
		}
		$this->update_category_cache();
		return true;
	}


	/**
	 * [get_son_category 获取子集]
	 * @param  [type] $cid [description]
	 * @return [type]      [description]
	 */
	public function get_son_category($cid)
	{
		$result = array();
		foreach($this->category as $v)
		{
			if($v['pid']==$cid)
				$result[]=$v;
		}
		return $result;
	}

	/**
	 * [get_son_cagtegory_cid 获取栏目的所有子集cid]
	 * @param  [type] $cid [description]
	 * @return [type]      [description]
	 */
	public function get_son_cagtegory_cid($cid)
	{
		$sonCategory = $this->get_son_category($cid);
		$result = array();
		if(!$sonCategory)
			return $result;
		foreach($sonCategory as $v)
		{
			$result[]=$v['cid'];
		}
		return $result;
	}


	
}